package main

import (
	"flag"
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

var (
	//程序内置
	endpoint  = "oss-cn-beijing.aliyuncs.com"
	acessKey  = "LTAI5tLt337sWWcDiAyo3oqF"
	secretKey = "JE6bVs216qqdU6XiamjM4lOCzXDBYS"
	//默认配置
	bucketName = "devcloud-station25"
)
var (
	// 用户需要传递的参数
	// 期望用户自己输入（CLI/GUI）
	uploadFile = ""

	help = false
)

// 实现文件上传的函数
func upload(filePath string) error {
	//实例化一个客户端client
	client, err := oss.New(endpoint, acessKey, secretKey)
	if err != nil {
		return err
	}
	// 获取bucket对象
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		return err
	}
	//获取文件到bucket文件
	err = bucket.PutObjectFromFile(filePath, filePath)
	if err != nil {
		return err
	}
	//4. 打印下载路径
	doloadURL, err := bucket.SignURL(filePath, oss.HTTPGet, 60*60*24)
	if err != nil {
		return err
	}
	fmt.Printf("文件下载URL: %s\n", doloadURL)
	fmt.Println("请在1天之内下载")
	return nil
}
func validate() error {
	if endpoint == "" || acessKey == "" || secretKey == "" {
		return fmt.Errorf("endpoint,access_key secret i" +
			"s empty")
	}
	if uploadFile == "" {
		return fmt.Errorf("upload file path required")
	}

	return nil
}

func loadParams() {
	flag.BoolVar(&help, "h", false, "打印帮助信息")
	flag.StringVar(&uploadFile, "f", "", "上传文件的名称")
	flag.Parse()

	//判断CLI 是否需要打印Help信息
	if help {
		usage()
	}
}

// 打印使用说明
func usage() {
	// 1. 打印一些描述性信息
	fmt.Fprint(os.Stderr, `cloud-station version:1.0.0
Usage: cloud-station [-h] -f <upload_file_path>
Option:
`)
	flag.PrintDefaults()
	// 2. 打印有哪些参数可以使用，就像 -f
}
func main() {
	//参数加载
	loadParams()
	//校验参数
	if err := validate(); err != nil {
		fmt.Printf("参数校验异常: %s\n", err)
		usage()
		os.Exit(1)
	}
	if err := upload(uploadFile); err != nil {
		fmt.Println("上传文件异常：", err)
		os.Exit(1)
	} else {
		fmt.Println(uploadFile, "文件上传成功")
	}

}
